import requests
import os
import time
from config import token, hostname, file_path  # 从配置文件中导入
from filter_ip6 import filter_ip6_reachable  # 导入动态地址获取函数


# 展开路径
file_path = os.path.expanduser(file_path)

# 读取上次保存的 IPv6 地址
def read_last_ipv6():
    if os.path.exists(file_path):  # 检查文件是否存在
        with open(file_path, "r") as file:
            return file.read().strip()
    return None  # 如果文件不存在，表示第一次执行

# 保存新的 IPv6 地址
def save_ipv6(ipv6):
    with open(file_path, "w") as file:
        file.write(ipv6)

# 更新 IPv6 地址
def update_ipv6(current_ipv6):
    url = f"http://dynv6.com/api/update?hostname={hostname}&token={token}&ipv6={current_ipv6}"
    retries = 3  # 重试次数
    for attempt in range(retries):
        try:
            print(f"第 {attempt + 1} 次尝试发起请求...")
            start_time = time.time()  # 请求开始时间
            response = requests.get(url, timeout=10)  # 设置超时为 10 秒
            end_time = time.time()  # 请求结束时间
            print(f"请求耗时: {end_time - start_time}秒")
            print(f"响应状态码: {response.status_code}, 响应内容: {response.text}")
            if response.status_code == 200:
                print("IPv6 地址更新成功")
                break  # 成功时跳出循环
        except requests.exceptions.RequestException as e:
            print(f"HTTP 请求失败: {e}")
        time.sleep(5)  # 如果请求失败，等待 5 秒后重试

# 主函数
def main():
    # 删除上次保存的 IPv6 地址文件
    if os.path.exists(file_path):
        os.remove(file_path)
        print("上次保存的 IPv6 地址文件已删除。")

    while True:  # 无限循环，让程序持续运行
        last_ipv6 = read_last_ipv6()
        print(f"上次保存的 IPv6 地址: {last_ipv6}")

        # 从 filter_ip6 获取当前有效的 IPv6 地址
        current_ipv6_list = filter_ip6_reachable()
        if not current_ipv6_list:
            print("未找到有效的 IPv6 地址")
            time.sleep(60)  # 如果未找到有效的地址，等 60 秒后重试
            continue  # 继续下一轮检查

        # 获取第一个有效的 IPv6 地址
        current_ipv6 = current_ipv6_list[0]
        print(f"当前的 IPv6 地址: {current_ipv6}")

        # 判断是否需要更新
        if last_ipv6 != current_ipv6:
            print("检测到 IPv6 地址变化，开始更新...")
            update_ipv6(current_ipv6)
            save_ipv6(current_ipv6)  # 保存当前 IPv6 地址
        else:
            print("IPv6 地址未变化，无需更新。")

        # 等待间隔（此处为 5 秒，可根据需要调整）
        time.sleep(5)  # 等待 5 秒后再次检查

if __name__ == "__main__":
    main()
